/* ==========
Class Item
========== */

// Constructeur d'Item
function Item(id, nom, p, ico, type, tags, droits, taille, nbcom, note)
{
    this.nbComItem   = nbcom;
    this.idItem      = id;
    this.nomItem     = nom;
    this.proprioItem = p;
    this.iconeItem   = ico;
    this.typeItem    = type;
    this.droitsItem  = droits;
    this.busy        = false;
    this.selected    = false;
    this.tailleImg   = taille.split(',');
    this.noteItem    = note;
    this.tagsItem    = (tags == '') ? new Array() : tags.replace(/, /g, ',').split(',');
}

// Afficher et définir les evenements sur l'item     
Item.prototype.afficher = function(affiche)
{
    var id    = this.idItem;
    var objet = this;
    var span  = '';  

    if(affiche != null){
        var struct =       
            '<div   class="item" id="item'+id+'">'+
            '  <img class="itemIcone" id="itemIcone'+id+'" src="" alt=""/>'+
            '  <div class="itemNom droits'+this.droitsItem+' visiteur'+id_ok+'" id="itemNom'+id+'" title="'+lang_cliquemod+'"></div>'+
            '  <div class="itemTags" id="itemTags'+id+'"></div>'+
            '</div>';
        new Insertion.Before('itemsR', struct);
    }

    this.afficheNom();
    this.afficheTags();
    this.afficheIcone();

    // Evenements
    if(this.droitsItem == 2 && id_ok == 1){
        Droppables.add('item'+id, {accept:'tag', hoverclass:'draghover', onDrop:function(tag,lastActive){
            idItem = getIdFromIdDiv($(lastActive).id);
            items[idItem].tagDropped(tag,idItem);
        }});
    }

    // Lien vers le telechargement de l'item sur l'icone de l'item
    Event.observe('itemIcone'+id, 'click', function(event){
        var shift   = event.shiftKey;
        var control = event.ctrlKey;
        idActif = id;
        if (!(control && id_ok == 1)){
            objet.voirDetail();
        }
    });

    // Si on a les droits sur l'item et que l'on est identifié on gère les évenements
    // avec les touches spéciales (control => selection multiple)
    if(this.droitsItem == 2 && id_ok == 1){
        // Evenements sur l'item complet (avec touches spéciales)
        Event.observe('item'+id, 'click', function(event){
            var shift   = event.shiftKey;
            var control = event.ctrlKey;
            if (control){
                objet.select();
                return false;
            }	
        });      
    }

    var cache = /cache\//;
    // Si c'est une image ou une vidéo et que le chemin de l'icone ne contiends pas "cache"
    // càd que ce n'est pas un aperçu, on tente sa création en arrière plan (ajax)
    if(!cache.test(this.iconeItem) &&( this.typeItem == 1 || this.typeItem == 3)){
        debLoad();
        new Ajax.Request('index.php?page=ap&getItem='+id+'&getApercu=1',{
            onComplete: finLoad,
            onSuccess: function(p){
                var rep = p.responseText;
                if(cache.test(rep)){			
                    objet.iconeItem = rep;   
                    objet.afficheIcone();
                }
            }
        });
    }
}

// Action lorsqu'un tag est droppé sur l'item    
Item.prototype.tagDropped = function(tag,idItem)
{
    leTag      = tags[getIdFromIdDiv(tag.id)];
    leTag.drag = true;
    lItem      = items[idItem];
    var pos    = 0;
    var i      = 0;
    var j      = 0;
    var lesTags    = tagsSelected();
// putain de merde de var à la con ça fait 3h que je cherche ... looser d'IE de merde !
    var lesItems   = itemsSelected();
    var listeTag    = new Array();
    var tagsForItem = new Array();

    // Si il n'y a pas de sélection multiple de tag on ajoute le tag "source"
    if(lesTags.length == 0){
        lesTags.push(leTag.idTag);
    }

    // Si il n'y a pas de sélection multiple d'item on ajoute l'item "destination"
    if(lesItems.length == 0){
        lesItems.push(lItem.idItem);
    }

    for(j = 0 ; j < lesItems.length ; j++){
        var itemCourant = items[lesItems[j]];
        for(i = 0 ; i < lesTags.length ; i++){
            var tagCourant = tags[lesTags[i]];
            if((pos = inArray(tagCourant.nomTag, itemCourant.tagsItem)) == -1){
                itemCourant.ajouterTag(tagCourant.nomTag);
            }
        }
        itemCourant.afficheTags();
    }

    for(var cpt = 0 ; cpt < lesTags.length ; cpt++){
        listeTag.push(tags[lesTags[cpt]].nomTag);
    }

    listeTags = listeTag.join(',');

    for(var cpt = 0 ; cpt < lesItems.length ; cpt++){
        tagsForItem.push(listeTags);
    }

    var lepostBody = 'ACTION_ITEM=ADD_TAG'
        +'&ID_ITEM[]='+lesItems.join('&ID_ITEM[]=')
        +'&TAGS[]='+tagsForItem.join('&TAGS[]=');

    var handlerFunc = function(t)
    {
        var r = t.responseText.split(':');
        if(r[0] != 'ok' && r[2].trim() != '15') alert(r[1]);
    }
    
    debLoad();
    new Ajax.Request('index.php?page=ajaxItem', {
        method:'post', 
        postBody:lepostBody, 
        onSuccess:handlerFunc, 
        onFailure:errFunc, 
        onComplete:finLoad
    });
}

// Ajout d'un tag
Item.prototype.ajouterTag = function(tag)
{
    this.tagsItem.push(tag);
}

// Suppression d'un tag
Item.prototype.supprimerTag = function(tag)
{
    var pos = inArray(tag, this.tagsItem);
    if(pos != -1){
        this.tagsItem.splice(pos, 1);
        return true;
    }
    return false;
}

// Selectionner l'item
Item.prototype.select = function()
{
    this.selected = !this.selected;
    if(this.selected){
        Element.addClassName('item'+this.idItem, 'selMultiItem');
    }
    else{
        Element.removeClassName('item'+this.idItem, 'selMultiItem');
    }
}

// Affiche (ou refresh) les tags de l'item (et les evenements associés)
Item.prototype.afficheTags = function()
{
    var o   = this;
    var cpt = 0;
    var aff = new Array();

    // Affichage
    for(cpt ; cpt < o.tagsItem.length ; cpt++){ 
        var leTag = o.tagsItem[cpt];
        aff[cpt]  = '<span id="Tag'+leTag+'Item'+o.idItem+'" title="'+lang_cliqueenl+'">'+leTag+'</span>';
    }

    $('itemTags'+o.idItem).innerHTML = aff.join(', ');

    // Evenements
    cpt = 0;
    if(id_ok == 1){
        for(cpt ; cpt < o.tagsItem.length ; cpt++){
            var leTag = o.tagsItem[cpt];

            Event.observe('Tag'+leTag+'Item'+o.idItem, 'click', blabla = function(e){
                // c'est un peu cracra mais bon...
                var tagTmp = (IE) ? e.srcElement.getAttribute('id') : this.id;
                var tag = tagTmp.replace(/^Tag/, '').replace(/Item[0-9]*$/,'');
                if(confirm(lang_viretagitem)){
                    var lepostBody = 'ACTION_ITEM=DEL_TAG&ID_ITEM[]='+o.idItem+'&TAGS[]='+tag;

                    debLoad();
                    new Ajax.Request('index.php?page=ajaxItem', {
                        method:'post', 
                        postBody:lepostBody, 
                        onSuccess:handlerFuncBase, 
                        onFailure:errFunc, 
                        onComplete:finLoad
                    });
                    o.supprimerTag(tag);
                    o.afficheTags();
                }
            });
        }
    }
}

// Affiche (ou refresh) l'icone de l'item    
Item.prototype.afficheIcone = function()
{
    $('itemIcone'+this.idItem).src = this.iconeItem;
}

// Affiche (ou refresh) le nom de l'item (et les evenements associés)
Item.prototype.afficheNom = function()
{
    var id    = this.idItem;
    var objet = this;
    var leNom = (/\s/.test(this.nomItem)||this.nomItem.length<20) ? this.nomItem : this.nomItem.truncate(18);
    $('itemNom'+id).innerHTML = '<span id="itemNomValue'+id+'">'+leNom+'</span>';

    // Evenement
    if(this.droitsItem == 2 && id_ok == 1){
        //Event.observe('itemNomValue'+id, 'mouseover', function(e){  
        //    new Effect.Highlight('itemNomValue'+id);
        //});

        Event.observe('itemNomValue'+id, 'click', function(e){
            $('itemNom'+id).innerHTML = '<form id="itemFormNom'+id+'"><input id="itemFormNomChamp'+id+'" type="text" value="'+objet.nomItem+'" /></form>';
            $('itemFormNomChamp'+id).focus();
            $('itemFormNom'+id).onsubmit = $('itemFormNomChamp'+id).onblur = function(){
                objet.renommer($F('itemFormNomChamp'+id).trim());
                return false;
            }
        });
    }
}	

// Supprime l'item
Item.prototype.supprimer = function()
{
    this.selected = false;
    $('item'+this.idItem).style.display = 'none';
    idsItem.splice(idsItem.positionOf(this.idItem),1); 
    nbItem--;
}

// Renomme l'item
Item.prototype.renommer = function(n)
{
    var o = this;
    if(this.nomItem != n) {
        var postBody = 'ACTION_ITEM=UP_NOM&ID_ITEM[]='+this.idItem+'&NEW_NOM_ITEM[]='+n;
        var okFunc = function(t){
            var retour = t.responseText.split(':');
            if(retour[0] == 'ok'){
                o.nomItem = n;
            }
            else{
                alert(retour[1]);
            }
            o.afficheNom();
        }

        debLoad();
        new Ajax.Request('index.php?page=ajaxItem', {
            parameters:postBody, 
            onSuccess:okFunc, 
            onFailure:errFunc, 
            onComplete:finLoad
        });

    }
    o.afficheNom();
}

// Visibilité
Item.prototype.hide = function()
{
    Element.hide('item'+this.idItem);
}

Item.prototype.show = function()
{
    Element.show('item'+this.idItem);
}

Item.prototype.rendrePublique = function(conf)
{
    var postBody = 'ACTION_ITEM=PUBLIC&ID_ITEM[]='+this.idItem+'&DROITS_ITEM[]=';
    var okFunc = function(t){
        var retour = t.responseText.split(':');
        if(retour[0] == 'ok'){
            if(conf) alert(lang_droitsmod);
        }
        else{
            alert(retour[1]);
        }
    }
    
    debLoad();
    new Ajax.Request('index.php?page=ajaxItem', {
        parameters:postBody+'1', 
        onSuccess:okFunc, 
        onFailure:errFunc, 
        onComplete:finLoad
    });
}

Item.prototype.rendrePrive = function(conf)
{
    var postBody = 'ACTION_ITEM=PUBLIC&ID_ITEM[]='+this.idItem+'&DROITS_ITEM[]=';
    var okFunc = function(t){
        var retour = t.responseText.split(':');
        if(retour[0] == 'ok'){
            if(conf) alert(lang_droitsmod);
        }
        else{
            alert(retour[1]);
        }
    }
    
    debLoad();
    new Ajax.Request('index.php?page=ajaxItem', {
        parameters:postBody+'0', 
        onSuccess:okFunc, 
        onFailure:errFunc, 
        onComplete:finLoad
    });
}

Item.prototype.makeNote = function()
{
    var retour = '';
    var note    = parseFloat(this.noteItem);
    var pentier = Math.floor(note);
    var pfloat  = ((note - pentier) == 0.5);
    var i=0;
    for(i;i<pentier;i++)
        retour += '<img id="notez'+(i+1)+'" title="'+lang_note+' '+(i+1)+'" src="plugin/note/images/etoileComplete.png" alt="1" />';
    if(pfloat)
        retour += '<img id="notez'+(i+1)+'" title="'+lang_note+' '+(++i)+'" src="plugin/note/images/etoileDemi.png" alt="1/2" />';
    for(i;i<5;i++) 
        retour += '<img id="notez'+(i+1)+'" title="'+lang_note+' '+(i+1)+'" src="plugin/note/images/etoileVide.png" alt="0" />';
    return retour;
}

var eventSet = false;
var eventMpInfo = function(){}
var eventMpMeta = function(){}
var eventMpDroits = function(){}

// Affiche l'item en plein écran et ses détails
Item.prototype.voirDetail = function(force)
{  
    // contre un bug IE
    cacherPages(true);
    // Init
    Element.hide('menuPopin');
    $('detailsDiv').innerHTML  = '';
    var isImage  = (this.typeItem == 1&&!force);
    var o        = this;
    var id       = o.idItem;
    var listeTag = (o.tagsItem.length>0) ? o.tagsItem.join(', ') : '<small>('+lang_notag+')</small>';
    
    // Composition de la boite
    var detailsT1  = '<table id="detailsTable">'
     +'<tr><td class="leftTd">'+lang_dnom+'&nbsp;: </td><td>'+o.nomItem+'</td></tr>'
     +'<tr><td class="leftTd">'+lang_dnote+'&nbsp;: </td><td id="notetd">'+o.makeNote()+'</td></tr>'     
     +'<tr><td class="leftTd">'+lang_dpropr+'&nbsp;: </td><td>'+o.proprioItem+'</td></tr>'
     +'<tr><td class="leftTd">'+lang_dtag+'&nbsp;: </td><td>'+listeTag+'</td></tr>'
     +'</table>';
    
    // utilisation du plugin notez!
    var detailsImage = '<a href="see.php?idItem='+id+'"><img class="pIco" src="'+o.iconeItem+'" /></a>';
    var detailsNom   = '<strong><a href="#" id="plus'+(uniqueId)+'">'+lang_detailsde+' "'+o.nomItem.truncate()+'"</a></strong>';
    if(isImage){
        tailleImage  = getImageSize(o.tailleImg[0], o.tailleImg[1]);
        detailsImage = '<a href="see.php?idItem='+id+'"><img src="see.php?idItem='+id+'" width="'+tailleImage[0]+'" height="'+tailleImage[1]+'"/></a>';
        detailsNom   = '<strong><a href="#" id="plus'+(uniqueId)+'">'+lang_affdet+' "'+o.nomItem.truncate()+'"</a></strong> ';
    }
   
    // Affichage de la boite
    if(!isImage)
    {
        $('detailsDiv').innerHTML  = detailsT1;
	Element.show('menuPopin');

        // events plugin notez!
        var notezEvents = function()
        {
            var i = 0;
            for(i=0;i<5;i++)
            {
                $('notez'+(i+1)).onclick = function(e)
                {
                    var n = this.id.replace(/notez/,'');
                    var postBody = 'PLUGIN=note&noteValue='+(n)+'&idItem='+id;
                    var okFunc = function(t)
                    {
                        var retour = t.responseText.split(':');
                        if(retour[0] == 'ok')
                        {
                            //alert('Note prise en compte.');
                            o.noteItem = retour[1];
                            $('notetd').innerHTML = o.makeNote();
                        }
                        else
                        {
                            alert(retour[1]);
                        }
                    }
                    
                    debLoad();
                    new Ajax.Request('index.php', 
                    {
                        parameters:postBody, 
                        onSuccess: okFunc, 
                        onFailure: errFunc, 
                        onComplete:finLoad
                    });
                }
            }
            
        }
        notezEvents();
    }

    $('pNom').innerHTML   = detailsNom;
    $('pImage').innerHTML = detailsImage;

    if(!isImage){

eventMpInfo = function(){
    o.voirDetail(true);}

//if(eventSet) Event.stopObserving('mpInfo','click',eventMpInfo);
//Event.observe('mpInfo','click',eventMpInfo);
$('mpInfo').onclick = eventMpInfo;

	eventMpMeta = function(){
        debLoad();
	new Ajax.Request('index.php?page=details&getItem='+id,{
            method:'get',        
            onComplete: finLoad,
            onSuccess: function showResponse(req){
                $('detailsDiv').innerHTML = req.responseText;
		//---alert('ok');
		if(o.typeItem != 1){
                    Element.hide('byebyesipasimage');
                    Element.hide('byebyesipasphoto1');
                    Element.hide('byebyesipasphoto2');                    
                }
                else if(/photo\"\>\/\//.test(req.responseText)){
                    Element.hide('byebyesipasphoto1');
                    Element.hide('byebyesipasphoto2');
                }

                if(o.typeItem != 7){
                    Element.hide('byebyesipascontact');
                }

                if(o.typeItem != 6){
                    Element.hide('byebyesipasfavoris');
                }
		Element.show('detailsTable2');
            }
        }
	);
	}
	//   if(eventSet) Event.stopObserving('mpMeta','click',eventMpMeta);
	//Event.observe('mpMeta','click',eventMpMeta);
	$('mpMeta').onclick = eventMpMeta;


eventMpDroits = function(){
        debLoad();
        new Ajax.Updater('detailsDiv','index.php?page=droits&getItem='+id,{
            method:'get',        
		    onComplete: finLoad, evalScripts:true            }
        );

      }


//	if(eventSet) Event.stopObserving('mpDroits','click',eventMpDroits);
//Event.observe('mpDroits','click',eventMpDroits);
$('mpDroits').onclick = eventMpDroits;

    eventSet = true;

    }
    
    // Events sur la boite
    Event.observe('popinDl', 'click', function(e){
        window.location = 'see.php?idItem='+id;
    });

    Event.observe('plus'+(uniqueId++), 'click', function(e){
        o.voirDetail(isImage);
    });

    Element.show('popinBackground');
    Element.show('popin');
    scroll(0,0);
}

/* =======================
Fonctions sur les items
======================= */

// Liste des items sélectionnés (@return array)
function itemsSelected(deselect)
{
    var clef;
    var r = new Array();
    for(clef in items){
        if(typeof(items[clef]) == "object") if(items[clef].selected){
            if(deselect == null){
                r.push(items[clef].idItem);
            }
            else{
                items[clef].select();
            }
        }
    }
    return r;
}

// Faire une même action sur plusieurs items (@param array)
function itemsAction(type, lesIds)
{
    var i = 0;
    for(i = 0 ; i < lesIds.length ; i++){
        if(type == 'supprimer'){
            items[lesIds[i]].supprimer();
        }
        else if(type == 'public'){
            items[lesIds[i]].rendrePublique();
        }
        else if(type == 'prive'){
            items[lesIds[i]].rendrePrive();
        }
    }
}
